﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace INSTA.Concepts.Attributes
{
    /// <summary>
    /// Pour définir l'usage qui va pouvoir être fait 
    /// de notre attribut "TableAttribute", on le décore
    /// avec un Attribut de type "AttributeUsage", qui nous
    /// permet de définir les points suivants :
    ///     
    ///     - Le ou les éléments sur lesquels on peut apposer 
    ///       notre attribut (ici, seulement sur des classes).
    /// 
    ///     - AllowMultiple : Est-ce que l'on permet d'apposer plusieurs fois 
    ///       notre attribut sur un même élément..
    ///     
    ///     - Inherited : Est-ce que uner classe dérivée va hériter
    ///       de la décoration avec notre attribut.
    /// 
    /// </summary>
    [AttributeUsage(AttributeTargets.Class,
                    AllowMultiple   = false,
                    Inherited       = false)]
    public class TableAttribute : Attribute
    {
        private string _tableName;

        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="tableName">Name of the table.</param>
        public TableAttribute(string tableName)
        {
            _tableName = tableName;
        }

        /// <summary>
        /// Gets the name of the table.
        /// </summary>
        public string TableName
        {
            get         { return _tableName;    }
            private set { _tableName = value;   }
        }
    }
}
